﻿package com.zouloux.ui 
{
	import com.zouloux.core.base.MovieClipBase;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	
	/**
	 * ...
	 * @author ZoulouX
	 */
	public class Component extends MovieClipBase implements IComponent
	{
		
		protected var _width			:Number 			= 0;
		protected var _height			:Number 			= 0;
		
		/**
		 * La largeur
		 */
		override public function get width ():Number
		{
			return _width;
		}
		override public function set width (pValue:Number):void
		{
			_width = pValue;
			dispatchSizeChanged();
		}
		
		/**
		 * La hauteur
		 */
		override public function get height ():Number
		{
			return _height;
		}
		override public function set height (pValue:Number):void
		{
			_height = pValue;
			dispatchSizeChanged();
		}
		
		/**
		 * Retourner la vraie largeur
		 */
		public function get realWidth ():Number
		{
			return super.width;
		}
		public function set realWidth (value:Number):void
		{
			super.width = value;;
		}
		
		/**
		 * Retourner la vraie hauteur
		 */
		public function get realHeight ():Number
		{
			return super.height;
		}
		public function set realHeight (value:Number):void
		{
			super.height = value;;
		}
		
		
		// Constructeur
		public function Component ()
		{
			// Construire le parent
			super();
			
			// Initialisation
			if (stage != null)
				initPrivate();
			else
				addEventListener(Event.ADDED_TO_STAGE, initPrivate);
		}
		
		// L'initialisation privée
		private function initPrivate (event:Event = null):void
		{
			// Ne plus écouter l'initialisation
			removeEventListener(Event.ADDED_TO_STAGE, initPrivate);
			
			init();
			
			/*
			// Mémoriser les dimensions
			var oldWidth:Number = super.width;
			var oldHeight:Number = super.height;
			
			// Mettre à la taille par défaut
			//super.width = width;
			//super.height = height;
			
			// Mémoriser la taille
			//var oldWidth:Number = super.width;
			//var oldHeight:Number = super.height;
			
			// Replacer à 1
			scaleX = 1;
			scaleY = 1;
			
			// Remettre la bonne taille
			//width = oldWidth;
			//height = oldHeight;
			
			// Redimentionner
			resize(oldWidth, oldHeight);
			
			// Dispatcher l'event de resize
			dispatchEvent(new Event(Event.RESIZE));*/
		}
		
		// La méthode d'initialisation
		override public function init ():void
		{
			
		}
		
		/**
		 * Redimentionnement
		 * @param	pWidth : La largeur
		 * @param	pHeight : La hauteur
		 */
		public function resize (pWidth:Number, pHeight:Number):void
		{
			width = pWidth;
			height = pHeight;
			dispatchSizeChanged();
		}
		
		/**
		 * La taille à changée
		 */
		final protected function dispatchSizeChanged ():void
		{
			dispatchEvent(new Event(Event.RESIZE));
		}
	}
}